package com.jsbs.iam.user.service;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.user.dto.ApplyTypeAddDto;
import com.jsbs.iam.user.dto.ApplyTypeDeleteDto;
import com.jsbs.iam.user.dto.ApplyTypeSelectDto;
import com.jsbs.iam.user.entity.IamApplyTypeBase;
import com.jsbs.iam.user.vo.ApplyTypeDetailVo;
import com.jsbs.iam.user.vo.RelevancyApplyVo;

import java.util.List;

/**
 * @BelongsProject: iam
 * @BelongsPackage: com.jsbs.iam.user.service
 * @Author: WangJiYuan
 * @Description: TODO
 * @Version: 2023-01-03  14:02
 */
public interface ApplyTypeService {
    /**
     * 获取关联应用
     * @param companyCode
     * @return
     */
    List<RelevancyApplyVo> getRelevancyApply(String companyCode);


    /**
     * 根据组织编码查询组织类型
     *
     * @param orgCodes
     * @param companyCode
     * @return
     */
    List<String> verifyOrgType(List<String> orgCodes, String companyCode);

    /**
     * 新增应用类型
     * @param applyTypeAddDto
     */
    void insetApplyTypeInfo(ApplyTypeAddDto applyTypeAddDto);

    /**
     * 查询应用类型数据
     * @param applyTypeSelectDto
     * @return
     */
    PageInfo getApplyTypeInfo(ApplyTypeSelectDto applyTypeSelectDto);

    /**
     * 校验应用类型名称唯一
     *
     * @param applyTypeName
     * @param companyCode
     * @return
     */
    int verifyApplyTypeName(String applyTypeName, String companyCode);

    /**
     * 根据应用类型编码查询应用类型详细数据
     *
     * @param applyTypeCode
     * @param companyCode
     * @return
     */
    ApplyTypeDetailVo getApplyTypeDetail(String applyTypeCode, String companyCode);

    /**
     * 获取应用类型名称
     *
     * @param applyTypeCode
     * @param companyCode
     * @return
     */
    String getApplyTypeName(String applyTypeCode, String companyCode);

    /**
     * 修改应用类型数据
     * @param applyTypeAddDto
     */
    void updateApplyTypeInfo(ApplyTypeAddDto applyTypeAddDto);

    /**
     * 批量删除应用类型数据
     * @param applyTypeDeleteDto
     */
    void deleteApplyTypeInfo(ApplyTypeDeleteDto applyTypeDeleteDto);

    /**
     * 校验所关联的应用是否关联其他应用类型
     *
     * @param applyCodes
     * @param applyTypeCode
     * @param companyCode
     * @return
     */
    int verifyRelevancyApply(List<String> applyCodes, String applyTypeCode, String companyCode);

    /**
     * 功能描述：获取所有应用类型下拉接口
     * @param companyCode
     * @return
     */
    List<IamApplyTypeBase> queryApplyTypeList(String companyCode);
}
